//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//#include<assert.h>
//
//struct ListNode
//{
//    int val;
//    struct ListNode* next;
//};
//
//
//struct ListNode* removeElements(struct ListNode* head, int val) {
//    struct ListNode* newhead = NULL;
//    struct ListNode* cur = head;
//    struct ListNode* tail = NULL;
//    while (cur)
//    {
//        if (cur->val != val && cur != NULL)
//        {
//            if (newhead == NULL)
//            {
//                newhead = cur;
//                cur = cur->next;
//                newhead->next = NULL;
//                tail = newhead;
//                continue;
//            }
//            else
//            {
//                tail->next = cur;
//                cur = cur->next;
//                tail = tail->next;
//                tail->next = NULL;
//                continue;
//            }
//        }
//        cur = cur->next;
//    }
//    return newhead;
//
//}
//
//
//int main()
//{
//    struct ListNode* a1 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* a2 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* a3 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* a4 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* a5 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* a6 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    struct ListNode* a7 = (struct ListNode*)malloc(sizeof(struct ListNode));
//    a1->val = 1;
//    a2->val = 2;
//    a3->val = 6;
//    a4->val = 3;
//    a5->val = 4;
//    a6->val = 5;
//    a7->val = 6;
//    struct ListNode* head = a1;
//    a1->next = a2;
//    a2->next = a3;
//    a3->next = a4;
//    a4->next = a5;
//    a5->next = a6;
//    a6->next = a7;
//    a7->next = NULL;
//    struct ListNode* ret = removeElements(head, 6);
//
//
//    return 0;
//}